今天筆者介紹的是資料移轉的部份,先從 SQL Server 移轉開始。
這個部份取決於原始資料的熟悉程度,以下列的是已經分析完以後使用的工具說明。
資料庫裡頭的欄位都是簡單欄位,所以基本上沒有什麼欄位的不合問題。
原來的儲存編碼為 Big5,統一到 MariaDB 是 UTF-8。
MySQL Workbench是一個很好用的管理工具,尤其是他的 Database Migration,不過他在轉資料的時候,錯誤訊息真的很少(只會說資料轉不進去),所以最後拿來轉 Schema 用。
使用 MySQL Workbench 移轉。
使用 bcp 的 script (bcp "select * from ... where ..." queryout "table.csv" -c -t"\t" -r"|" -S <server> -U <users> -P <password>
),以 Tab 分開欄位,以 | 分行,這個可以透過 SELECT * FROM information_schema.tables WHERE TABLE_TYPE='BASE TABLE'
兜出語法來。
因為筆者使用的是 SQL Server 2012,匯出的資料儲存不能是 UTF-8(Windows 的 ANSI 在中文電腦裡是 Big5),所以我透過以下的幾個方法來做
Get-Content table.csv | Out-File -encoding utf8 table_utf8.csv
load file
匯入這邊大家一定覺得很納悶,為什麼已經有了 Powershell 轉檔了還要 iconv,還有直接透過匯入的 ?
其實這些都是試誤出來的。
一開始想說先幫 MariaDB 轉成 UTF-8 格式的 CSV 檔,讓 MariaDB 不必經過轉換檔的問題,但是就碰到了 Unknown Character UTF-8 '?'
的問題,不是都已經轉成 UTF-8 格式了嗎?
原來原始資料就有一些問題,導致轉檔也會好像轉好似的沒發生什麼問題,但是確實不是 UTF-8 文字。所以透過 iconv 轉,有時候可以,有時候還是有問題,最後只能透過 MariaDB 的轉檔方式執行。
load data local infile 'e://import//table_utf8.csv' into ... fields terminated by '\t' lines terminated by '|';
load data local infile 'e://import//table_utf8.csv' into ... character set big5 fields terminated by '\t' lines terminated by '|';
接下來就是漫長的對檔過程,最後終於完成 SQL Server 移轉資料到 MariaDB的目標。
明天要介紹的是 Oracle DB 移轉資料到 MariaDB 的過程。